combobox: Add a child property
authorMatthias Clasen <mclasen@redhat.com>
Sun, 3 May 2020 16:04:23 +0000 (12:04 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 5 May 2020 02:53:08 +0000 (22:53 -0400)
docs/reference/gtk/gtk4-sections.txt
gtk/gtkcombobox.c
gtk/gtkcombobox.h
testsuite/gtk/defaultvalue.c

index 123ec712e17cd977e0aca63729668eacefc97647..b87b73fff4b83bd2e358031bd188403a90052d7d 100644 (file)
@@ -663,6 +663,8 @@ gtk_combo_box_set_entry_text_column
 gtk_combo_box_get_entry_text_column
 gtk_combo_box_set_popup_fixed_width
 gtk_combo_box_get_popup_fixed_width
+gtk_combo_box_set_child
+gtk_combo_box_get_child
 <SUBSECTION Standard>
 GTK_TYPE_COMBO_BOX
 GTK_COMBO_BOX
index 755d017178a1a5bc589e9035f702436533625fbd..cf982c6ee9b2fb4343930d0428a31a7d68600c98 100644 (file)
@@ -190,7 +190,8 @@ enum {
   PROP_ENTRY_TEXT_COLUMN,
   PROP_POPUP_FIXED_WIDTH,
   PROP_ID_COLUMN,
-  PROP_ACTIVE_ID
+  PROP_ACTIVE_ID,
+  PROP_CHILD
 };
 
 static guint combo_box_signals[LAST_SIGNAL] = {0,};
@@ -791,6 +792,14 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
                                                           TRUE,
                                                           GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
 
+   g_object_class_install_property (object_class,
+                                    PROP_CHILD,
+                                    g_param_spec_object ("child",
+                                                         P_("Child"),
+                                                         P_("The child_widget"),
+                                                         GTK_TYPE_WIDGET,
+                                                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
+
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkcombobox.ui");
   gtk_widget_class_bind_template_child_internal_private (widget_class, GtkComboBox, box);
   gtk_widget_class_bind_template_child_internal_private (widget_class, GtkComboBox, button);
@@ -971,6 +980,10 @@ gtk_combo_box_set_property (GObject      *object,
       gtk_combo_box_set_active_id (combo_box, g_value_get_string (value));
       break;
 
+    case PROP_CHILD:
+      gtk_combo_box_set_child (combo_box, g_value_get_object (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1032,6 +1045,10 @@ gtk_combo_box_get_property (GObject    *object,
         g_value_set_string (value, gtk_combo_box_get_active_id (combo_box));
         break;
 
+      case PROP_CHILD:
+        g_value_set_object (value, gtk_combo_box_get_child (combo_box));
+        break;
+
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
@@ -2995,3 +3012,41 @@ gtk_combo_box_get_popup (GtkComboBox *combo_box)
 
   return priv->popup_widget;
 }
+
+/**
+ * gtk_combo_box_set_child:
+ * @combo_box: a #GtkComboBox
+ * @child: (allow-none): the child widget
+ *
+ * Sets the child widget of @combo_box.
+ */
+void
+gtk_combo_box_set_child (GtkComboBox *combo_box,
+                         GtkWidget   *child)
+{
+  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
+  g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+
+  if (gtk_bin_get_child (GTK_BIN (combo_box)))
+    gtk_container_remove (GTK_CONTAINER (combo_box), gtk_bin_get_child (GTK_BIN (combo_box)));
+  if (child)
+    gtk_container_add (GTK_CONTAINER (combo_box), child);
+  g_object_notify (G_OBJECT (combo_box), "child");
+}
+
+/**
+ * gtk_combo_box_get_child:
+ * @combo_box: a #GtkComboBox
+ *
+ * Gets the child widget of @combo_box.
+ *
+ * Returns: (nullable) (transfer none): the child widget of @combo_box
+ */
+GtkWidget *
+gtk_combo_box_get_child (GtkComboBox *combo_box)
+{
+  g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), NULL);
+
+  return gtk_bin_get_child (GTK_BIN (combo_box));
+}
+
index 8a306b66fae5d9f37b08d64b37778469afe89da8..1debaecc16ccf28796e008ef59dc176f112f02c3 100644 (file)
@@ -149,6 +149,13 @@ GDK_AVAILABLE_IN_ALL
 gboolean      gtk_combo_box_set_active_id        (GtkComboBox *combo_box,
                                                   const gchar *active_id);
 
+GDK_AVAILABLE_IN_ALL
+void          gtk_combo_box_set_child            (GtkComboBox *combo_box,
+                                                  GtkWidget   *child);
+GDK_AVAILABLE_IN_ALL
+GtkWidget *   gtk_combo_box_get_child            (GtkComboBox *combo_box);
+
+
 G_END_DECLS
 
 #endif /* __GTK_COMBO_BOX_H__ */
index 907f3d3a7ec3f206ddcaa76d7a0dc156c0aa7106..9a8d0609e176270b7eb8651b2990842056e1a758 100644 (file)
@@ -181,6 +181,10 @@ test_type (gconstpointer data)
          (strcmp (pspec->name, "pages") == 0)) /* pages always gets a non-NULL value */
        continue;
 
+      if (g_type_is_a (type, GTK_TYPE_COMBO_BOX) &&
+          (strcmp (pspec->name, "child") == 0))
+        continue;
+
       if (g_type_is_a (type, GTK_TYPE_POPOVER) &&
          (strcmp (pspec->name, "pointing-to") == 0))
        continue;